// 使用 uni.request 替代 fetch
function fetchRandomDomain() {
  return new Promise((resolve, reject) => {
    uni.request({
      url: 'https://json-1323553530.cos.ap-beijing.myqcloud.com/json/cn-api.json',
      method: 'GET',
      success: (res) => {
        if (res.statusCode === 200 && res.data && res.data.ip) {
          console.log('获取到的IP：', res.data.ip);
          resolve(['https://15.168.21.211:82','https://8.138.105.28:82']);
        } else {
          reject(new Error('JSON 数据格式错误'));
        }
      },
      fail: (error) => {
        console.error('获取远程 JSON 数据时发生错误:', error);
        reject(error);
      }
    });
  });
}

let baseHost = null; // 修改为 null 初始值
let siterootPromise = null;
// 检查 IP 是否可用
async function checkIpAvailability(ip) {
  return new Promise((resolve) => {
    uni.request({
      url: ip,
      method: 'GET',
      timeout: 3000, // 设置超时时间
      success: () => {
        console.log(`IP ${ip} 可用`);
        resolve(true);
      },
      fail: () => {
        console.warn(`IP ${ip} 不可用`);
        resolve(false);
      }
    });
  });
}
// 异步获取随机域名并更新 baseHost
async function fetchRandomDomainAndSetConfig() {
  try {
    const ips = await fetchRandomDomain(); // 获取 IP 数组
    for (const ip of ips) {
      const isAvailable = await checkIpAvailability(ip);
      if (isAvailable) {
        baseHost = ip; // 选择可用的 IP
        console.log('选定的可用域名:', baseHost);
        return baseHost; // 返回可用的 IP
      }
    }
    throw new Error('所有 IP 均不可用');
  } catch (error) {
    console.error('获取随机域名时发生错误:', error);
    throw error;
  }
}

// 获取 siteroot 的异步值，确保只执行一次
async function getSiteroot() {
  if (!siterootPromise) {
    siterootPromise = new Promise(async (resolve, reject) => {
      try {
        await fetchRandomDomainAndSetConfig();
        resolve(baseHost); // 使用 baseHost 作为 resolved 值
        console.log('获取到的域名B:', baseHost);
      } catch (error) {
        console.error('获取随机域名失败:', error);
        reject(error);
      }
    });
  }
  return siterootPromise;
}

// 导出 appInfo 函数，使其可以被调用获取 siteroot 的异步值
export default {
  adpid: false,
  appInfo: async function() {
    try {
      const siteroot = await getSiteroot();
	  //const siteroot = "https://cn.haoym.cc";
      console.log('获取到的域名C:', siteroot);
      return { siteroot };
    } catch (error) {
      console.error('获取 siteroot 失败:', error);
      throw error;
    }
  }
}
